﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.Drawing;
using System.Drawing.Printing;
using ENLibraryClass;

using System.Xml;
using System.Data.SqlClient;

using Microsoft.Office.Interop.Excel;
using System.Reflection;

namespace uacars
{
    public partial class frmClientes : Form
    {
        string auxCargo;
        string auxLogin;
        string auxPass;

        public frmPedidos ped = null;
        public frmCitas pedC = null;

        DataGridViewPrinter dgvClientesPrinter;

        //FUNCIONES

        public bool ValidarCampos()
        {
            bool aux = true;
            errorProvider.Clear();

            if (maskedTextBoxDNI.Text.Length < 8)
            {
                errorProvider.SetError(maskedTextBoxDNI, "El DNI debe contener 8 dígitos.");
                aux = false;
            }
            if (maskedTextBoxTelefono.Text.Length < 9)
            {
                errorProvider.SetError(maskedTextBoxTelefono, "El teléfono debe contener 9 dígitos.");
                aux = false;
            }
            if (maskedTextBoxCodigo.Text.Length < 5)
            {
                errorProvider.SetError(maskedTextBoxCodigo, "El código postal debe contener 5 dígitos.");
                aux = false;
            }
            if (!Regex.Match(textEmail.Text, @"^(\D|\d)+@{1}(\D|\d)+\.([a-z]|[A-Z])+$").Success)
            {
                errorProvider.SetError(textEmail, "Email incorrecto.\nDebe tener el siguiente formato: ejemplo@ejemplo.com");
                aux = false;
            }
            if (!Regex.Match(textNombre.Text, @"^([a-z]|[A-Z]|\s)+$").Success)
            {
                errorProvider.SetError(textNombre, "El nombre sólo puede estar formado por caracteres.");
                aux = false;
            }
            if (!Regex.Match(textApellido1.Text, @"^([a-z]|[A-Z]|\s)+$").Success)
            {
                errorProvider.SetError(textApellido1, "El primer apellido sólo puede estar formado por caracteres.");
                aux = false;
            }
            if (!Regex.Match(textApellido2.Text, @"^([a-z]|[A-Z]|\s)+$").Success)
            {
                errorProvider.SetError(textApellido2, "El segundo apellido sólo puede estar formado por caracteres.");
                aux = false;
            }
            if (!Regex.Match(textPoblacion.Text, @"^([a-z]|[A-Z]|\s)+$").Success)
            {
                errorProvider.SetError(textPoblacion, "La población sólo puede estar formada por caracteres.");
                aux = false;
            }
            if (dateTimePickerFechaAlta.Checked == false)
            {
                errorProvider.SetError(dateTimePickerFechaAlta, "Debe habilitar la fecha de Alta.");
                aux = false;
            }

            if (aux == false)
            {
                toolStripStatusLabelCliente.Text = "Error en 1 o más campos";
            }

            return aux;
        }

        public bool AlgunoRelleno()
        {
            bool aux = false;
            if (maskedTextBoxDNI.Text.Length > 0 || textNombre.Text.Length > 0 || textApellido1.Text.Length > 0 || textApellido2.Text.Length > 0 || maskedTextBoxTelefono.Text.Length > 0 || textEmail.Text.Length > 0 || textDireccion.Text.Length > 0 || textPoblacion.Text.Length > 0 || comboProvincia.Text.Length > 0 || maskedTextBoxCodigo.Text.Length > 0 || dateTimePickerFechaAlta.Checked == true || textLogin.Text.Length > 0 || textPassword.Text.Length > 0)
            {
                aux = true;
            }

            return aux;
        }

        public bool CamposRellenos()
        {
            bool aux = false;
            if (maskedTextBoxDNI.Text.Length > 0 && textNombre.Text.Length > 0 && textApellido1.Text.Length > 0 && textApellido2.Text.Length > 0 && maskedTextBoxTelefono.Text.Length > 0 && textEmail.Text.Length > 0 && textDireccion.Text.Length > 0 && textPoblacion.Text.Length > 0 && comboProvincia.Text.Length > 0 && maskedTextBoxCodigo.Text.Length > 0 && dateTimePickerFechaAlta.Checked == true && textLogin.Text.Length > 0 && textPassword.Text.Length > 0)
            {
                aux = true;
            }

            return aux;
        }

        //FORMULARIO CLIENTES

        public frmClientes()
        {
            InitializeComponent();

            btnOk.Enabled = false;
            btnCancel.Enabled = false;
        }

        public frmClientes(string algo)
        {
            InitializeComponent();
            buttonNuevo.Visible = false;
            buttonNuevo.Enabled = false;
            buttonModificar.Enabled = false;
            buttonModificar.Visible = false;
            buttonBorrar.Enabled = false;
            buttonBorrar.Visible = false;
            groupBoxUsuario.Visible = false;

            btnOk.Enabled = true;
            btnOk.Visible = true;
        }

        public frmClientes(string pCargo,string usu, string pass)
        {
            InitializeComponent();

            btnOk.Enabled = false;
            btnCancel.Enabled = false;

            auxCargo = pCargo;
            auxLogin = usu;
            auxPass = pass;
        }

        private bool CargoAlto()
        {
            bool aux = false;
            if (auxCargo == "Administrador" || auxCargo == "Directivo" || auxCargo == "Oficina")
                aux = true;

            return aux;
        }

        private void maskedTextBoxDNI_TextChanged(object sender, EventArgs e)
        {
            //Activar Nuevo
            if (CamposRellenos() && CargoAlto())
                buttonNuevo.Enabled = true;
            else
                buttonNuevo.Enabled = false;
        }
        
        private void textNombre_TextChanged(object sender, EventArgs e)
        {
            //Activar Nuevo
            if (CamposRellenos() && CargoAlto())
                buttonNuevo.Enabled = true;
            else
                buttonNuevo.Enabled = false;
        }

        private void textApellido1_TextChanged(object sender, EventArgs e)
        {
            //Activar Nuevo
            if (CamposRellenos() && CargoAlto())
                buttonNuevo.Enabled = true;
            else
                buttonNuevo.Enabled = false;
        }

        private void textApellido2_TextChanged(object sender, EventArgs e)
        {
            //Activar Nuevo
            if (CamposRellenos() && CargoAlto())
                buttonNuevo.Enabled = true;
            else
                buttonNuevo.Enabled = false;
        }

        private void textDireccion_TextChanged(object sender, EventArgs e)
        {
            //Activar Nuevo
            if (CamposRellenos() && CargoAlto())
                buttonNuevo.Enabled = true;
            else
                buttonNuevo.Enabled = false;
        }

        private void maskedTextBoxTelefono_TextChanged(object sender, EventArgs e)
        {
            //Activar Nuevo
            if (CamposRellenos() && CargoAlto())
                buttonNuevo.Enabled = true;
            else
                buttonNuevo.Enabled = false;
        }

        private void textPoblacion_TextChanged(object sender, EventArgs e)
        {
            //Activar Nuevo
            if (CamposRellenos() && CargoAlto())
                buttonNuevo.Enabled = true;
            else
                buttonNuevo.Enabled = false;
        }

        private void comboProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Activar Nuevo
            if (CamposRellenos() && CargoAlto())
                buttonNuevo.Enabled = true;
            else
                buttonNuevo.Enabled = false;
        }

        private void maskedTextBoxCodigo_TextChanged(object sender, EventArgs e)
        {
            //Activar Nuevo
            if (CamposRellenos() && CargoAlto())
                buttonNuevo.Enabled = true;
            else
                buttonNuevo.Enabled = false;
        }

        private void textEmail_TextChanged(object sender, EventArgs e)
        {
            //Activar Nuevo
            if (CamposRellenos() && CargoAlto())
                buttonNuevo.Enabled = true;
            else
                buttonNuevo.Enabled = false;
        }

        private void buttonLimpiar_Click(object sender, EventArgs e)
        {
            LimpiarCampos();
        }

        private void buttonNuevo_Click(object sender, EventArgs e)
        {
            if (ValidarCampos())
            {
                try
                {
                    ENIdSiguiente idsiguiente = new ENIdSiguiente("clientes", 0);
                    int idCliente = idsiguiente.BuscarIdSiguiente();
                    ENClientes nuevo = new ENClientes(idCliente, maskedTextBoxDNI.Text, textNombre.Text, textApellido1.Text, textApellido2.Text, maskedTextBoxTelefono.Text, textEmail.Text, textDireccion.Text, textPoblacion.Text, comboProvincia.Text, maskedTextBoxCodigo.Text, dateTimePickerFechaAlta.Value.Date, textLogin.Text, textPassword.Text);

                    nuevo.AltaCliente();
                    lbIdent.Text = "";
                    toolStripStatusLabelCliente.Text = "Alta Realizada";

                    idsiguiente.ActualizarIdSiguiente();

                    if (CargoAlto() == true)
                    {
                        dgvClientes.DataSource = nuevo.BuscarClientes();
                    }
                    else
                    {
                        dgvClientes.DataSource = nuevo.BuscarClientes2();
                    }


                    ficheros f = new ficheros();
                    f.EscribirLog(0, 0, idCliente.ToString());
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error al insertar Cliente. El DNI y/o el Login ya existen.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                }
            }
        }

        private void buttonBuscar_Click(object sender, EventArgs e)
        {
            //Primero se comprueba que haya alguno de los campos rellenos
            if (AlgunoRelleno())
            {
                try
                {
                    System.Data.DataTable buscar = new System.Data.DataTable();
                    if (dateTimePickerFechaAlta.Checked == false)
                    {
                        if (CargoAlto() == true)
                        {
                            ENClientes objetoAbuscar = new ENClientes(0, maskedTextBoxDNI.Text, textNombre.Text, textApellido1.Text, textApellido2.Text, maskedTextBoxTelefono.Text, textEmail.Text, textDireccion.Text, textPoblacion.Text, comboProvincia.Text, maskedTextBoxCodigo.Text, DateTime.Parse("01/01/1900"), textLogin.Text, textPassword.Text);
                            buscar = objetoAbuscar.BuscarClientesPor();
                        }
                        else
                        {
                            ENClientes objetoAbuscar = new ENClientes(0, maskedTextBoxDNI.Text, textNombre.Text, textApellido1.Text, textApellido2.Text, maskedTextBoxTelefono.Text, textEmail.Text, textDireccion.Text, textPoblacion.Text, comboProvincia.Text, maskedTextBoxCodigo.Text, DateTime.Parse("01/01/1900"), "", "");
                            buscar = objetoAbuscar.BuscarClientesPor();
                        }
                    }
                    else
                    {
                        if (CargoAlto() == true)
                        {
                            ENClientes objetoAbuscar = new ENClientes(0, maskedTextBoxDNI.Text, textNombre.Text, textApellido1.Text, textApellido2.Text, maskedTextBoxTelefono.Text, textEmail.Text, textDireccion.Text, textPoblacion.Text, comboProvincia.Text, maskedTextBoxCodigo.Text, dateTimePickerFechaAlta.Value.Date, textLogin.Text, textPassword.Text);
                            buscar = objetoAbuscar.BuscarClientesPor();
                        }
                        else
                        {
                            ENClientes objetoAbuscar = new ENClientes(0, maskedTextBoxDNI.Text, textNombre.Text, textApellido1.Text, textApellido2.Text, maskedTextBoxTelefono.Text, textEmail.Text, textDireccion.Text, textPoblacion.Text, comboProvincia.Text, maskedTextBoxCodigo.Text, dateTimePickerFechaAlta.Value.Date, "", "");
                            buscar = objetoAbuscar.BuscarClientesPor();
                        }
                    }

                    //Hay que diferenciar los dos tipos de buscar
                    dgvClientes.DataSource = buscar;
                    LimpiarCampos();
                    if (buscar.Rows.Count == 0)
                    {
                        toolStripStatusLabelCliente.Text = "Búsqueda Realizada - No se han encontrado resultados";
                    }
                    else
                    {
                        toolStripStatusLabelCliente.Text = "Búsqueda Realizada";
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error en la búsqueda.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                }
            }
            else //todos los campos vacíos
            {
                System.Data.DataTable buscar = new System.Data.DataTable();
                ENClientes objetoAbuscar = new ENClientes();

                //Hay que diferenciar los dos tipos de buscar
                if (CargoAlto() == true)
                {
                    buscar = objetoAbuscar.BuscarClientes();
                }
                else
                {
                    buscar = objetoAbuscar.BuscarClientes2();
                }
                dgvClientes.DataSource = buscar;
                LimpiarCampos();
                if (buscar.Rows.Count == 0)
                {
                    toolStripStatusLabelCliente.Text = "Búsqueda Realizada - No se han encontrado resultados";
                }
                else
                {
                    toolStripStatusLabelCliente.Text = "Búsqueda Realizada";
                }
            }
        }

        private void frmClientes_Load(object sender, EventArgs e)
        {
            ENClientes clientes = new ENClientes();
            System.Data.DataTable dtClientes;
            if (CargoAlto() == true)
            {
                dtClientes = clientes.BuscarClientes();
            }
            else
            {
                dtClientes = clientes.BuscarClientes2();
            }
            dgvClientes.DataSource = dtClientes;

            ENProvincias provs = new ENProvincias();
            System.Data.DataTable tabla = provs.BuscarProvincias();
            foreach (DataRow registro in tabla.Rows)
            {
                comboProvincia.Items.Add(registro["nombre"].ToString());
            }

            if (auxCargo == "Chofer" || auxCargo == "Vendedor")
            {
                groupBoxUsuario.Visible = false;
                groupBoxUsuario.Enabled = false;
            }

            int numColumnas = dgvClientes.Columns.Count;

            if (dgvClientes.Columns.Count == 14)
            {
                dgvClientes.Columns[12].Visible = false;
                dgvClientes.Columns[13].Visible = false;
            }
        }

        private void dgvClientes_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (CargoAlto())
            {
                buttonNuevo.Enabled = true;
            }
            dgvClientes.CurrentRow.Selected = true;

            lbIdent.Text = dgvClientes.Rows[dgvClientes.CurrentCell.RowIndex].Cells["id"].Value.ToString();
            maskedTextBoxDNI.Text = dgvClientes.Rows[dgvClientes.CurrentCell.RowIndex].Cells["nif"].Value.ToString();
            textNombre.Text = dgvClientes.Rows[dgvClientes.CurrentCell.RowIndex].Cells["nombre"].Value.ToString();
            textApellido1.Text = dgvClientes.Rows[dgvClientes.CurrentCell.RowIndex].Cells["apellido1"].Value.ToString();
            textApellido2.Text = dgvClientes.Rows[dgvClientes.CurrentCell.RowIndex].Cells["apellido2"].Value.ToString();
            textDireccion.Text = dgvClientes.Rows[dgvClientes.CurrentCell.RowIndex].Cells["direccion"].Value.ToString();
            textPoblacion.Text = dgvClientes.Rows[dgvClientes.CurrentCell.RowIndex].Cells["localidad"].Value.ToString();
            comboProvincia.Text = dgvClientes.Rows[dgvClientes.CurrentCell.RowIndex].Cells["provincia"].Value.ToString();
            if (CargoAlto() == true)
            {
                textLogin.Text = dgvClientes.Rows[dgvClientes.CurrentCell.RowIndex].Cells["login"].Value.ToString();
                textPassword.Text = dgvClientes.Rows[dgvClientes.CurrentCell.RowIndex].Cells["password"].Value.ToString();
            }
            maskedTextBoxTelefono.Text = dgvClientes.Rows[dgvClientes.CurrentCell.RowIndex].Cells["telefono"].Value.ToString();
            maskedTextBoxCodigo.Text = dgvClientes.Rows[dgvClientes.CurrentCell.RowIndex].Cells["cp"].Value.ToString();
            textEmail.Text = dgvClientes.Rows[dgvClientes.CurrentCell.RowIndex].Cells["email"].Value.ToString();

            dateTimePickerFechaAlta.Value = (DateTime)(TypeDescriptor.GetConverter(new DateTime(1990, 5, 6)).ConvertFrom(dgvClientes.Rows[dgvClientes.CurrentCell.RowIndex].Cells["fechaalta"].Value.ToString()));
        }

        private void btnOk_Click(object sender, EventArgs e)
        {
            if (lbIdent.Text != "" && lbIdent.Text != " ")
            {
                if (pedC == null)
                {
                    ped.tbxCliente.Text = lbIdent.Text;
                    this.Close();
                }
                else
                {
                    if (ped == null)
                    {
                        pedC.tbxCliente.Text = lbIdent.Text;
                        this.Close();
                    }
                }
            }
            else
                MessageBox.Show("Debe seleccionar un cliente.");
        }

        private void textLogin_TextChanged(object sender, EventArgs e)
        {
            //Activar Nuevo
            if (CamposRellenos() && CargoAlto())
                buttonNuevo.Enabled = true;
            else
                buttonNuevo.Enabled = false;
        }

        private void textPassword_TextChanged(object sender, EventArgs e)
        {
            //Activar Nuevo
            if (CamposRellenos() && CargoAlto())
                buttonNuevo.Enabled = true;
            else
                buttonNuevo.Enabled = false;
        }

        private void dateTimePickerFechaAlta_ValueChanged(object sender, EventArgs e)
        {
            //Activar Nuevo
            if (CamposRellenos() && CargoAlto())
                buttonNuevo.Enabled = true;
            else
                buttonNuevo.Enabled = false;
        }

        private void dateTimePickerFechaAlta_MouseDown(object sender, MouseEventArgs e)
        {
            //Activar Nuevo
            if (CamposRellenos() && CargoAlto())
                buttonNuevo.Enabled = true;
            else
                buttonNuevo.Enabled = false;
        }

        public void LimpiarCampos()
        {
            lbIdent.Text = "";
            maskedTextBoxDNI.Text = "";
            maskedTextBoxCodigo.Text = "";
            maskedTextBoxTelefono.Text = "";
            textNombre.Text = "";
            textApellido1.Text = "";
            textApellido2.Text = "";
            comboProvincia.Text = "";
            textPoblacion.Text = "";
            textDireccion.Text = "";
            dateTimePickerFechaAlta.Value = DateTime.Now;
            textEmail.Text = "";
            textLogin.Text = "";
            textPassword.Text = "";

            dateTimePickerFechaAlta.Checked = false;
            toolStripStatusLabelCliente.Text = "";
            errorProvider.Clear();
        }

        private void lbIdent_TextChanged(object sender, EventArgs e)
        {
            if (lbIdent.Text != "")
            {
                if (CargoAlto() == false)
                {
                    if (auxCargo == "Oficina")
                    {
                        buttonModificar.Enabled = true;
                        buttonBorrar.Enabled = true;
                    }
                }
                else
                {
                    buttonModificar.Enabled = true;
                }

                if (auxCargo == "Directivo" || auxCargo == "Administrador" || auxCargo=="Oficina")
                {
                    buttonBorrar.Enabled = true;
                }
            }
            else
            {
                buttonModificar.Enabled = false;
                buttonBorrar.Enabled = false;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void buttonModificar_Click_1(object sender, EventArgs e)
        {
            if (ValidarCampos())
            {
                try
                {
                    ENClientes actualizado;
                    if (CargoAlto() == true)
                    {
                        actualizado = new ENClientes(int.Parse(lbIdent.Text), maskedTextBoxDNI.Text, textNombre.Text, textApellido1.Text, textApellido2.Text, maskedTextBoxTelefono.Text, textEmail.Text, textDireccion.Text, textPoblacion.Text, comboProvincia.Text, maskedTextBoxCodigo.Text, dateTimePickerFechaAlta.Value.Date, textLogin.Text, textPassword.Text);
                    }
                    else
                    {
                        actualizado = new ENClientes(int.Parse(lbIdent.Text), maskedTextBoxDNI.Text, textNombre.Text, textApellido1.Text, textApellido2.Text, maskedTextBoxTelefono.Text, textEmail.Text, textDireccion.Text, textPoblacion.Text, comboProvincia.Text, maskedTextBoxCodigo.Text, dateTimePickerFechaAlta.Value.Date, "", "");
                    }

                    actualizado.ModificarCliente();

                    dgvClientes.DataSource = actualizado.BuscarClientes();

                    toolStripStatusLabelCliente.Text = "Modificación Realizada";

                    lbIdent.Text = "";
                    ficheros f = new ficheros();
                    f.EscribirLog(2, 0, maskedTextBoxDNI.Text.ToString());
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error al modificar Cliente. Este cliente no existe.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
                }
            }
        }

        private void buttonBorrar_Click_1(object sender, EventArgs e)
        {
            if (auxCargo == "Administrador" || auxCargo == "Directivo")
            {
                errorProvider.Clear();
                try
                {
                    if (MessageBox.Show("¿Desea eliminar el Cliente seleccionado?", "Advertencia", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                    {
                        ENClientes borrado = new ENClientes(int.Parse(lbIdent.Text), maskedTextBoxDNI.Text, textNombre.Text, textApellido1.Text, textApellido2.Text, maskedTextBoxTelefono.Text, textEmail.Text, textDireccion.Text, textPoblacion.Text, comboProvincia.Text, maskedTextBoxCodigo.Text, dateTimePickerFechaAlta.Value.Date, textLogin.Text, textPassword.Text);

                        borrado.BorrarCliente();

                        dgvClientes.DataSource = borrado.BuscarClientes();

                        LimpiarCampos();
                        toolStripStatusLabelCliente.Text = "Baja Realizada";

                        ficheros f = new ficheros();
                        f.EscribirLog(1, 0, maskedTextBoxDNI.Text.ToString());
                    }
                    else
                    {
                        toolStripStatusLabelCliente.Text = "Baja Cancelada";
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error al borrar Cliente.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);
                }
            }
        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            frmImprimir Imprimir = new frmImprimir(dgvClientes, "CLIENTES");
            Imprimir.Show();
        }

        private void buttonXML_Click(object sender, EventArgs e)
        {
            ExportarXML();
        }

        private void buttonPDF_Click(object sender, EventArgs e)
        {
            PDF pdf = new PDF();
            pdf.generarPDF("frmClientes",saveFileDialog1,dgvClientes);
        }

        public void ExportarXML()
        {
            saveFileDialog1.FileName = "UACARS clientes.xml";
            saveFileDialog1.Filter = "Archivo XML|*.xml";
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string path = saveFileDialog1.FileName;
                int numFilas = 0;

                numFilas = dgvClientes.Rows.Count;

                DataSet ds = new DataSet("Clientes");
                System.Data.DataTable dt = new System.Data.DataTable("Cliente");

                dt.Columns.Add("id", Type.GetType("System.String"));

                dt.Columns.Add("nif", Type.GetType("System.String"));

                dt.Columns.Add("nombre", Type.GetType("System.String"));

                dt.Columns.Add("apellido1", Type.GetType("System.String"));

                dt.Columns.Add("apellido2", Type.GetType("System.String"));

                dt.Columns.Add("telefono", Type.GetType("System.String"));

                dt.Columns.Add("email", Type.GetType("System.String"));

                dt.Columns.Add("direccion", Type.GetType("System.String"));

                dt.Columns.Add("localidad", Type.GetType("System.String"));

                dt.Columns.Add("provincia", Type.GetType("System.String"));

                dt.Columns.Add("cp", Type.GetType("System.String"));

                dt.Columns.Add("fechaalta", Type.GetType("System.String"));

                dt.Columns.Add("login", Type.GetType("System.String"));

                dt.Columns.Add("password", Type.GetType("System.String"));

                if (numFilas > 0)
                {
                    for (int i = 0; i < numFilas; i++)
                    {
                        DataRow dr;
                        dr = dt.NewRow();

                        dr.BeginEdit();

                        dr["id"] = dgvClientes[0, i].Value.ToString();

                        dr["nif"] = dgvClientes[1, i].Value.ToString();

                        dr["nombre"] = dgvClientes[2, i].Value.ToString();

                        dr["apellido1"] = dgvClientes[3, i].Value.ToString();

                        dr["apellido2"] = dgvClientes[4, i].Value.ToString();

                        dr["telefono"] = dgvClientes[5, i].Value.ToString();

                        dr["email"] = dgvClientes[6, i].Value.ToString();

                        dr["direccion"] = dgvClientes[7, i].Value.ToString();

                        dr["localidad"] = dgvClientes[8, i].Value.ToString();

                        dr["provincia"] = dgvClientes[9, i].Value.ToString();

                        dr["cp"] = dgvClientes[10, i].Value.ToString();

                        dr["fechaalta"] = dgvClientes[11, i].Value.ToString();

                        dr["login"] = dgvClientes[12, i].Value.ToString();

                        dr["password"] = dgvClientes[13, i].Value.ToString();

                        dr.EndEdit();

                        dt.Rows.Add(dr);
                    }
                }
                ds.Tables.Add(dt);
                ds.WriteXml(path);
            }
        }

        public void ImportarXML()
        {
            DataSet dataSet1 = new DataSet();
            openFileDialog1.FileName = "";
            openFileDialog1.Filter = "Archivo XML|*.xml";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string file = openFileDialog1.FileName;

                if (file.Length > 0)
                {
                    try
                    {
                        dataSet1.ReadXml(file);

                        DataGridView aux = new DataGridView();
                        dgvClientes.DataSource = aux.DataSource;
                        dgvClientes.DataMember = "";

                        dgvClientes.DataSource = dataSet1;
                        dgvClientes.DataMember = "cliente";

                        System.IO.StringWriter swXML = new System.IO.StringWriter();
                        dataSet1.WriteXmlSchema(swXML);
                    }

                    catch (System.Security.SecurityException ex)
                    {
                        MessageBox.Show("Error al acceder al fichero," + ex.Message, "Error de fichero", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    }
                }
            }
        }

        private void buttonExcel_Click(object sender, EventArgs e)
        {
            Excel();
        }

        public void Excel()
        {
            XML xml = new XML();
            xml.ExportarExcel(dgvClientes);
        }
    }
}
